/**
 * Copyright (c) suzuki ryoutoku
 * See this code regarding the Apache License Version 2.0
 * @author suzuki ryoutoku
 * @date 2007-8-20
 * @file declare.h
 */

//=============================================================================
//	Protected multiple include
//=============================================================================
#ifndef DECLARE_H
/** protected multiple include */
#define DECLARE_H

#include "../graphics/Bitmap.h"
#include <string>

//=============================================================================
//	Declare namespace
//=============================================================================
/**
 * library's namespace
 * \note
 * Library's namespace have child namespace.
 * @author suzuki ryoutoku
 * @date 2007-8-20
 * @version 1.0
 */
namespace library{
  /**
   * 3d graphic relation
   * @author suzuki ryoutoku
   * @date 2007-8-20
   * @version 1.0
   */
  namespace graphics{
	class RenderingManager;
	class Screen;
	class Light;
	class Camera;

	class GraphicalCommand;
	class MacroCommand;
	class TestCommand;
	class DrawBox;
	class Sprite;
	class DrawString;

	class Point;
	
	class Cluster;
	class TriangleCluster;
	class TriangleStripCluster;
	class RectangleCluster;
	class SegmentCluster;
	class Polygon;
	class Group;
	class PolygonBody;

	class Model;

	class ImageData;
	class ImageDataManager;

	class Reader;
	class Read3ds;
	class ReadVdf;
	class ReadPcm;

	class Writer;

	class StripCreator;
	class StripCreatingOption;

	bool SaveBitmapFile(const std::string& filename, 
						BITMAPINFO* info, 
						unsigned int *pixel);

	enum GraphicalObjectType{
	  NONE	  = 0x000,
	  VERTEX  = 0x001,
	  POLYGON = 0x010,
	  SEGMENT = 0x100,
	};

	enum SelectStarting{
	  IO_ORDER			= 0x00,
	  ADJACENCE_DEGREE	= 0x01,
	  DENSITY_DEGREE	= 0x02,
	};
  }

  /**
   * Mathematics relation
   * \note
   * Vector & Matrix are templage class.
   * @author suzuki ryoutoku
   * @date 2007-8-20
   * @version 1.0
   */
  namespace mathematics{
	template <typename TYPE> class Vector;
	template <typename TYPE> class Matrix;
	template <typename TYPE> class Quaternion;
	template <typename TYPE> class Color;
	template <typename TYPE> class Vector2D;
	template <typename TYPE> class Vector3D;
	class Coordinate;
  }

  /**
   * Log system relation
   * @author suzuki ryoutoku 
   * @date 2008-1-3
   * @version 1.0
   */
  namespace log{
	class LogManager;
  }

  

  /**
   * Detecting collision relation
   * \note
   * @author suzuki ryoutoku
   * @date 2007-8-22
   * @version 1.0
   */
  namespace collision{
	class CollisionDetectionManager;
	class ContentOfBoundingVolume;
	class BoundingVolume;
	class BoundingCircle;
	class BoundingLine;
	class BoundingRectangle;
  }

  /**
   * Dynamics animation relation
   * @author suzuki ryoutoku
   * @date 2007-8-25
   * @version 1.0
   */
  namespace dynamics{
	class DynamicsSystemManager;
	class PhysicalObject;
	
  }

  /**
   * Sound system relation
   * @author suzuki ryoutoku
   * @date 2007-8-25
   * @version 1.0
   */
  namespace sound{
	class SoundManager;
	class PCM;
	class RiffChunk;
	class PcmFormatChunk;
	class FactChunk;
	class DataChunk;
	
  }
  
}

#endif
